#include "../include/Position.h"

Bloc::Bloc(){
	
	// On initialise tout à 0
	taille.x = 0;
	taille.y = 0;
	position.x = 0;
	position.y = 0;
}

Bloc::Bloc( Position p, Taille t)
{
	// On initialise avec les paramètres
	taille.x = t.x;
	taille.y = t.y;
	position.x = p.x;
	position.y = p.y;
}

void Bloc::setTaille( Taille t)
{
	taille.x = t.x;
	taille.y = t.y;
}

void Bloc::setPosition( Position p)
{
	position.x = p.x;
	position.y = p.y;
}

Position* Bloc::getPosition()
{
	return &position;
}

Taille Bloc::getTaille() const
{
	return taille;
}

Position Bloc::creerPosition(float x, float y)
{
	Position p;
	p.x=x;
	p.y=y;
	return p;
}

Taille Bloc::creerTaille(float x, float y)
{
	Taille t;
	t.x=x;
	t.y=y;
	return t;
}
int Bloc::getNumeroCoin(Position p)
{
	float dist[4];

	dist[0] = sqrt( (p.x-position.x)*(p.x-position.x) +
		(p.y-position.y)*(p.y-position.y));
	dist[1] = sqrt( (p.x-position.x-taille.x)*(p.x-position.x-taille.x) +
		(p.y-position.y-taille.y)*(p.y-position.y-taille.y));
	dist[2] = sqrt( (p.x-position.x)*(p.x-position.x) +
		(p.y-position.y-taille.y)*(p.y-position.y-taille.y));
	dist[3] = sqrt( (p.x-position.x-taille.x)*(p.x-position.x-taille.x) +
		(p.y-position.y)*(p.y-position.y));

    int cornerId=0;
    for( int i=0; i< 4; i++)
    {
        if( dist[cornerId] > dist[i] )
            cornerId = i;
    }
    return cornerId;
}
bool Bloc::estMemePosition(Position p1, Position p2)
{
    return p1.x == p2.x && p1.y == p2.y;
}

/// Retourne si les positions sont identiques avec un peu de marge
bool Bloc::estMemePositionArrondie(Position p1, Position p2)
{
    float marge=0.01;
    //std::cout<<p1.x<<","<<p1.y<<" and "<<p2.x<<","<<p2.y<<" value is "<<(p2.x - marge <= p1.x && p1.x <= p2.x + marge && p2.y - marge <= p1.y && p1.y <= p2.y + marge)<<std::endl;
    return p2.x - marge <= p1.x && p1.x <= p2.x + marge && p2.y - marge <= p1.y && p1.y <= p2.y + marge; 
}
